package 从上到下打印二叉树;

import java.util.ArrayList;
import java.util.LinkedList;

//题目描述
//从上往下打印出二叉树的每个节点，同层节点从左至右打印。
public class Solution
{
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root)
    {
        //判断输入
        ArrayList<Integer> integers = new ArrayList<>();
        if (root==null)
            return integers;
       
        LinkedList<TreeNode> treeNodes = new LinkedList<>();
        //把根节点放进队列，然后每次从队列中取出一个节点打印，如果这个节点有子节点，就把他的子节点放入队尾
        treeNodes.offer(root);

        while (!treeNodes.isEmpty())
        {
            TreeNode temp= treeNodes.poll();
            int p = temp.val;
            integers.add(p);
            if (temp.left!=null)
                treeNodes.offer(temp.left);
            if (temp.right!=null)
                treeNodes.offer(temp.right);
        }
        return integers;
    }

    public static void main(String[] args)
    {
        Solution solution = new Solution();
        System.out.println(
                solution.PrintFromTopToBottom(null)
        );
    }
}
